import {Injectable} from '@angular/core';
import {Platform, ToastController, App, NavController, Tabs} from 'ionic-angular';

@Injectable()
export class BackButtonService {

  //控制硬件返回按钮是否触发，默认false
  backButtonPressed: boolean = false;

  //构造函数 依赖注入
  constructor(public platform: Platform,
              public appCtrl: App,
              public toastCtrl: ToastController) {
  }

  //注册方法
  registerBackButtonAction(tabRef: Tabs): void {

    //registerBackButtonAction是系统自带的方法
    this.platform.registerBackButtonAction(() => {
      //获取NavController
      let activeNav: NavController = this.appCtrl.getActiveNav();
      // //如果可以返回上一页，则执行pop
      // if (activeNav.canGoBack()) {
      //   activeNav.pop();
      // } else {
      //   //如果不是tab页 或者 tab页当前点中的是第一个tab，则提示退出app
      //   if (tabRef == null || tabRef._selectHistory[tabRef._selectHistory.length - 1] === tabRef.getByIndex(0).id) {
      //     //执行退出
      //     this.showExit();
      //   } else {
      //
      //     tabRef.select(0);
      //   }
      // }

      console.log("---当前页面--" + activeNav.getActive().name);
      console.log(tabRef);

      //如果不是从tab页点击进入的子页面
      if(tabRef == null){
        //当页面可以后退时，则后退
        if (activeNav.canGoBack()) {
          activeNav.pop();
        }
        //当无法后退时 则直接提示退出app
        else{
          this.showExit();//执行退出
        }
      }
      //如果是从tab页点击进入的子页面
      else{
        //如果是第一个tab子页
        if (tabRef._selectHistory[tabRef._selectHistory.length - 1] === tabRef.getByIndex(0).id){
          //当子页面可以后退时，则后退到tab首页，这个地方有bug，OrderManagePage订单查询页面里有ion-nav，导致无法后退，提示退出
          if (activeNav.canGoBack()) {
            activeNav.pop();
          }
          //不能后退时，提示退出app
          else{
            this.showExit();//执行退出
          }
        }
        //如果不是第一个tab子页
        else{
          //当子页面可以后退时，则后退到当前tab页
          if (activeNav.canGoBack()) {
            activeNav.pop();
          }
          //不能后退时，退到tab第一个tab页
          else{
            tabRef.select(0);//选择tab页第一个的标签
          }
        }
      }
    });
  }

  //退出应用方法
  private showExit(): void {
    //如果为true，退出
    if (this.backButtonPressed) {
      this.platform.exitApp();
    } else {
      //第一次按，弹出Toast
      this.toastCtrl.create({
        message: '再按一次退出应用',
        duration: 2000,
        position: 'bottom'
      }).present();
      //标记为true
      this.backButtonPressed = true;
      //两秒后标记为false，如果退出的话，就不会执行了
      setTimeout(() => this.backButtonPressed = false, 2000);
    }
  }
}
